/*
 * Copyright (c) 2016, The National Archives <pronom@nationalarchives.gov.uk>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following
 * conditions are met:
 *
 *  * Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 *  * Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 *  * Neither the name of the The National Archives nor the
 *    names of its contributors may be used to endorse or promote products
 *    derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
package uk.gov.nationalarchives.droid.gui.action;

import java.awt.Component;
import java.util.List;

import javax.swing.JOptionPane;

import uk.gov.nationalarchives.droid.gui.DroidUIContext;
import uk.gov.nationalarchives.droid.gui.ProfileForm;
import uk.gov.nationalarchives.droid.profile.ProfileManager;

/**
 * Action to stop running profiles.
 * @author rflitcroft
 *
 */
public class StopRunningProfilesAction {

    private DroidUIContext context;
    private ProfileManager profileManager;
    private Component parent;

    /**
     * 
     * @param profileManager the profile manager
     * @param context the droid UI context
     * @param parent the prant component
     */
    public StopRunningProfilesAction(ProfileManager profileManager, DroidUIContext context,
        Component parent) {
    
        this.profileManager = profileManager;
        this.context = context;
        this.parent = parent;
    }
    
    /**
     * Returns true if all profiles were stopped; false otherwise.
     * @return true if the profiles were stopped, false otherwise.
     */
    public boolean execute() {
        
        boolean profilesStopped;
        
        List<ProfileForm> runningProfiles = context.allRunningProfiles();
        if (runningProfiles.isEmpty()) {
            profilesStopped = true;
        } else {
            int response = JOptionPane.showConfirmDialog(parent, 
                    "Running profiles must be stopped before DROID closes. Do you want to stop running profiles?",
                    "Warning", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE);
            if (response == JOptionPane.YES_OPTION) {
                for (ProfileForm profile : runningProfiles) {
                    profileManager.stop(profile.getProfile().getUuid());
                }
                profilesStopped = true;
            } else {
                profilesStopped = false;
            }
        }
        
        return profilesStopped;
    }
    
}
